#ifndef EXPORTED_H
#define EXPORTED_H

#include "definitions.h"
#include "util.h"
#include "MeasurementObject.h"

#ifdef WIN32
#define DECLARE_MO_AUTHOR(author)\
    extern "C" __declspec(dllexport) wchar_t* getMOAuthor() {\
        return author;\
    }

#define DECLARE_MO_NAME(name)\
    extern "C" __declspec(dllexport) wchar_t* getMOName() {\
        return name;\
    }

#define DECLARE_MO_TYPE(type)\
    extern "C" __declspec(dllexport) unsigned short getMOType() {\
        return type;\
    }

#define DECLARE_MO_INPUT(input)\
    extern "C" __declspec(dllexport) wchar_t* getMOInputType() {\
        return input;\
    }

#define DECLARE_MO_OUTPUT(output)\
    extern "C"__declspec(dllexport)  wchar_t* getMOOutputType() {\
        return output;\
    }

#define DECLARE_MO_CLASS_NAME(className)\
    extern "C" __declspec(dllexport) measurement::MeasBase* getMOInstance() {\
		return new className;\
	}
#else
#define DECLARE_MO_AUTHOR(author)\
    extern "C" wchar_t* getMOAuthor() {\
        return author;\
    }

#define DECLARE_MO_NAME(name)\
    extern "C" wchar_t* getMOName() {\
        return name;\
    }

#define DECLARE_MO_TYPE(type)\
    extern "C" unsigned short getMOType() {\
        return type;\
    }

#define DECLARE_MO_INPUT(input)\
    extern "C" wchar_t* getMOInputType() {\
        return input;\
    }

#define DECLARE_MO_OUTPUT(output)\
    extern "C" wchar_t* getMOOutputType() {\
        return output;\
    }

#define DECLARE_MO_CLASS_NAME(className)\
    extern "C" measurement::MeasBase* getMOInstance() {\
		return new className;\
	}
#endif


#endif // EXPORTED_H
